﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using Contracts.DAL;
using DAL;
using DTO;
using DTO.Projectos;

namespace Control
{
    public class Temporizador
    {

        private Timer timer;

        private IRepositorio repositorio = new Repositorio();

        public Temporizador(long intervalTime)
        {
            timer = new Timer(intervalTime);
            timer.Enabled = false;              //incialmente parado
            timer.Elapsed += new ElapsedEventHandler(callbackEvent);
        }

        public void stopTimer(){
            timer.Enabled = false;
        }

        public void startTimer(){
            if (!timer.Enabled)
            {
                timer.Enabled = true;
            }
        }

        public void callbackEvent(object sender,EventArgs eArgs){

            DateTime dataCurrente = DateTime.Now;           //obter data Actual
            IEnumerable<Projecto> projectosEmFasePagamento = repositorio.ObterProjectos(Estados.Pagamento, ProjectType.Any);
            int countProjectosEmPagamento = projectosEmFasePagamento.Count();

            int countProjectosFechados = 0;
            foreach (Projecto p in projectosEmFasePagamento)
            {
                if (dataCurrente > p.DateLimite)
                {
                    GestaoFase.EvoluiEstado(Evento.Fechar, p);  //Evoluir Projecto para estado Fechado
                    GestaoAccao.RegistaFinalTempo(p);           //Registar Accao
                    ++countProjectosFechados;
                }
            }
            if ((countProjectosEmPagamento - countProjectosFechados) == 0)   //foram fechados todos os projectos em pagamento?
            {
                stopTimer();
            }
        }

    }
}
